package cn.hill4j.tool.spring.ext.mvc.decrypt;

import cn.hill4j.tool.spring.ext.mvc.exception.RequestDesInvokerException;
import org.springframework.core.MethodParameter;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
  * ClassName: RequestDecStrategy
  * Description: 请求参数加密策略定义类
  * @author hillchen
  * Date: 2023/8/13
  * @version: 1.0
  */
public class RequestDecStrategy {
    /**
     * 策略处理bean
     */
    private Object strategyBean;
    /**
     * 策略处理具体方法
     */
    private Method strategyMethod;
    /**
     * 策略处理方法请求参数类型
     */
    private MethodParameter[] parameters;
    /**
     * @author hillchen
     * Description: 构造方法
     * Date: 2023/8/13 00:26
     * @param strategyBean 策略处理bean
     * @param strategyMethod 策略处理方法
     * @param parameters 策略执行请求参数类型
     **/
    public RequestDecStrategy(Object strategyBean, Method strategyMethod, MethodParameter[] parameters) {
        this.strategyBean = strategyBean;
        this.strategyMethod = strategyMethod;
        this.parameters = parameters;
    }
    /**
     * @author hillchen
     * Description: 获取策略处理方法请求参数类型
     * Date: 2023/8/13 00:27
     * @return MethodParameter[]
     **/
    public MethodParameter[] getParameters() {
        return parameters;
    }

    /**
     * @author hillchen
     * Description: 执行加密策略
     * Date: 2023/8/13 00:27
     * @param args 请求参数
     * @return Object
     **/
    public Object invokeStrategy(Object[] args) throws RequestDesInvokerException {
        try {
            return strategyMethod.invoke(strategyBean,args);
        }catch  (InvocationTargetException | IllegalAccessException e) {
            throw new RequestDesInvokerException("request解密失败",e);
        }
    }
}
